//////////////////////////////////////////////////////////////////////////

#ifndef _OBSERVABLE_H_
#include "observable.h"
#endif

//////////////////////////////////////////////////////////////////////////


Observable::~Observable()
{
}


//////////////////////////////////////////////////////////////////////////


void Observable::AddObserver( Observer* _observer )
{
    // Add observer to collection
    m_Observers.insert(_observer);
}


//////////////////////////////////////////////////////////////////////////


void Observable::RemoveObserver( Observer* _observer )
{
    // Remove observer from collection
    m_Observers.erase(_observer);
}

//////////////////////////////////////////////////////////////////////////


void Observable::NotifyObservers( Observer::Event _event )
{
    // For all observers
    Observers::iterator it = m_Observers.begin();
    while ( it != m_Observers.end() )
    {
        Observer* observer = *it;
        if (observer)
        {
            // If observer triggers on this event
            if ( observer->IsEventToObserve(_event) )
                // Call event handler
                observer->OnEvent(_event, this);
        }

        // Next observer
        ++it;
    }
}


//////////////////////////////////////////////////////////////////////////
